package com.dev.jwt.handler;

import com.auth0.jwt.exceptions.TokenExpiredException;
import com.dev.jwt.model.emum.ResponseEnum;
import com.dev.jwt.utils.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理器，用于捕获并处理应用程序中抛出的特定异常。
 * 使用@RestControllerAdvice注解，标识这个类是一个处理全局异常的控制器顾问。
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 日志记录器，用于记录异常信息。
     */
    public final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 处理Token过期异常。
     * 当用户持有的Token过期时，此异常会被抛出。
     *
     * @param e Token过期异常的具体实例，包含详细的错误信息。
     * @return 返回一个封装了错误信息的响应对象。
     */
    @ExceptionHandler(TokenExpiredException.class)
    public R<?> handleTokenExpiredException(TokenExpiredException e) {
        // 记录token过期的错误信息
        logger.error("token 已过期");
        logger.error(e.getMessage());
        // 返回一个表示Token过期的错误响应
        return R.error(ResponseEnum.TOKEN_EX);
    }
}
